package com.smedi.ismedi.inmail.core.application.service;

import com.smedi.ismedi.inmail.core.application.command.*;
import com.smedi.ismedi.inmail.core.domain.aggregatemodel.ProcessTask;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 通知公告应用服务接口
 *
 * @author jiangqinxuan
 * @date 2021/07/26
 */
public interface ProcessApplicationService {


    /**
     * 部署 流程定义
     *
     * @param processPerformFile 流程图文件
     */
    void deployProcessDefinition(MultipartFile processPerformFile) throws IOException;

    /**
     * 获取 流程 列表
     *
     * @param processTaskListCommand 流程 列表 命令
     * @return List<ProcessTask>
     */
    List<ProcessTask> getProcessTaskList(ProcessTaskListCommand processTaskListCommand);

    /**
     * 启动/重启 流程实例
     *
     * @param processInstanceStartCommand 流程实例 启动/重启 命令
     * @return ProcessInstance
     */
    ProcessTask startProcessInstance(ProcessInstanceStartCommand processInstanceStartCommand);

    /**
     * 完成 流程任务
     *
     * @param processTaskCompleteCommand 流程任务 完成 命令
     * @return ProcessTask
     */
    List<ProcessTask> completeProcessTask(ProcessTaskCompleteCommand processTaskCompleteCommand);

    /**
     * 关闭 流程实例
     *
     * @param processInstanceCloseCommand 流程实例 关闭 命令
     */
    void closeProcessInstance(ProcessInstanceCloseCommand processInstanceCloseCommand);

    /**
     * 撤回 流程实例
     *
     * @param processTaskCancelCommand 流程实例 撤回 命令
     */
    List<ProcessTask> cancelProcessTask(ProcessTaskCancelCommand processTaskCancelCommand);
}
